package paket;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import entity.Korisnik;
import entity.Kupac;
import entity.NacinPlacanja;
import entity.Narudzbina;
import entity.Prodavac;
import sesion.AdministratorDaoJpa;
import sesion.KorisnikDaoJpa;
import sesion.KupacDaoJpa;
import sesion.ProdavacDaoJpa;

@Path("/rad/")
public class RadSaKorisnicima {
	 KorisnikDaoJpa korisnikDao=new KorisnikDaoJpa();
	 KupacDaoJpa kupacDaoJpa=new KupacDaoJpa();
	 ProdavacDaoJpa prodavacDaoJpa=new ProdavacDaoJpa();
	 AdministratorDaoJpa administratorDaoJpa=new AdministratorDaoJpa();
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/logIn/{korisnickoIme}/{sifra}/") 
	 public Korisnik dajKorisnika( @PathParam ("korisnickoIme") String korisnickoIme, @PathParam ("sifra") String sifra) {
		 Korisnik korisnik=kupacDaoJpa.ulogujKupca(korisnickoIme, sifra);
		 if(korisnik!=null)
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 else
			 korisnik=prodavacDaoJpa.ulogujProdavaca(korisnickoIme, sifra);
		 
		 if(korisnik!=null)
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 else 
			 korisnik=administratorDaoJpa.ulogujAdministratora(korisnickoIme, sifra);
		 
		 if(korisnik==null)
			 (korisnik=new Prodavac()).setPoruka("Ne postoji dati korisnik u bazi");
		 else
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 
		 return korisnik;
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/registrujKupca/{korisnickoIme}/{sifra}/{adresa}/") 
	 public Korisnik registrujKupca( @PathParam ("korisnickoIme") String korisnickoIme, @PathParam ("sifra") String sifra, @PathParam ("adresa") String adresa) {
		 
		 Korisnik korisnik=new Kupac(korisnickoIme,sifra,adresa);
		 if(kupacDaoJpa.pronadjiKupaca(korisnickoIme)==null && prodavacDaoJpa.pronadjiProdavca(korisnickoIme)==null)
		 {
			 korisnikDao.save(korisnik);
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 }
		 else
			 korisnik.setPoruka("Vec postoji korisnik sa tim imenom");
		 
		 return korisnik;
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/registrujProdavca/{korisnickoIme}/{sifra}/{adresa}/") 
	 public Korisnik registrujProdavca( @PathParam ("korisnickoIme") String korisnickoIme, @PathParam ("sifra") String sifra, @PathParam ("adresa") String adresa) 
	 {
		 Korisnik korisnik=new Prodavac(korisnickoIme,sifra,adresa);
		 if(kupacDaoJpa.pronadjiKupaca(korisnickoIme)==null && prodavacDaoJpa.pronadjiProdavca(korisnickoIme)==null)
		 {
			 korisnikDao.save(korisnik);
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 }
		 else
			 korisnik.setPoruka("Vec postoji korisnik sa tim imenom");
		 
		 return korisnik;
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/registruj/{korisnickoIme}/{sifra}/{adresa}/{koga}") 
	 public Korisnik registruj( @PathParam ("korisnickoIme") String korisnickoIme, @PathParam ("sifra") String sifra, @PathParam ("adresa") String adresa,@PathParam ("koga") String koga) 
	 {
		 Korisnik korisnik=null;
		 if(koga.equals("kupac"))
			 korisnik=new Kupac(korisnickoIme,sifra,adresa);
		 else
			 korisnik=new Prodavac(korisnickoIme,sifra,adresa);
		 
		 if(kupacDaoJpa.pronadjiKupaca(korisnickoIme)==null && prodavacDaoJpa.pronadjiProdavca(korisnickoIme)==null)
		 {
			 korisnikDao.save(korisnik);
			 korisnik.setPoruka(korisnik.getClass().getSimpleName());
		 }
		 else
			 korisnik.setPoruka("Vec postoji korisnik sa tim imenom");
		 
		 return korisnik;
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiKorisnike/") 
	 public List<Korisnik> vratiKorisnike() {
		 List<Korisnik> pom=new ArrayList<Korisnik>();
		 pom.addAll(kupacDaoJpa.findAll());
		 
		 for (Korisnik korisnik : pom) {
			 korisnik.setPoruka("Kupac");
		 }
		 
		 int n=pom.size();
		 pom.addAll(prodavacDaoJpa.findAll());
		 for(int i=n;i<pom.size();i++)
			 pom.get(i).setPoruka("Prodavac");
		 
		 return pom;
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiKupce/") 
	 public List<Kupac> vratiKupce() {
		 return kupacDaoJpa.findAll();
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiProdavce/") 
	 public List<Prodavac> vratiProdavce() {
		 return prodavacDaoJpa.findAll();
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiNarudzbineKupca/{korisnickoIme}") 
	 public List<Narudzbina> vratiNarudzbineKupca(@PathParam ("korisnickoIme") String korisnickoIme)
	 {
		 Kupac kupac=kupacDaoJpa.pronadjiKupaca(korisnickoIme);
		 
		 if(kupac==null)
			 return null;
		 
		 return kupac.getNarudzbina();
	 }
	 
	 @DELETE
	 @Path("/izbrisiKorisnika/{koisnickoIme}")
	 public void ukloniKorisnika(@PathParam ("koisnickoIme") String koisnickoIme)
	 {
		 //kupacDaoJpa.izbrisiKorisnika(koisnickoIme);
		 kupacDaoJpa.izbrisiKupca(koisnickoIme);
		 prodavacDaoJpa.izbrisiProdavca(koisnickoIme);
		 
		 /*Korisnik korisnik=kupacDaoJpa.pronadjiKupaca(koisnickoIme);
		 if(korisnik!=null)
			 korisnikDao.delete(korisnik);
		 else
		 {
			 korisnik=prodavacDaoJpa.pronadjiProdavca(koisnickoIme);
			 if(korisnik!=null)
				 korisnikDao.delete(korisnik);
		 }*/
	 }
	 
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiNarudzbinaNacinPlacanja/{korisnickoIme}/{datum}") 
	 public NacinPlacanja vratiNarudzbinaNacinPlacanja(@PathParam ("korisnickoIme") String korisnickoIme,@PathParam ("datum") String datum)
	 {
		 Kupac kupac=kupacDaoJpa.pronadjiKupaca(korisnickoIme);
		 
		 if(kupac==null)
			 return null;
		 
		 datum=pretvoriNormalanDatum(datum);
		 NacinPlacanja pom=null;
		 for (Narudzbina iterable_element : kupac.getNarudzbina()) {
			 if(iterable_element.getNacinPlacanja()!=null && iterable_element.getDatum().toString().equals(datum))
			 {
				 pom=iterable_element.getNacinPlacanja();
				 break;
			 }
		 }
		 return pom;
	 }

	@SuppressWarnings("deprecation")
	private String pretvoriNormalanDatum(String datum)
	{
		 String godina,mesec,dan,sat,minut,sekund;
		 godina=datum.substring(0, datum.indexOf("-"));
		 datum=datum.substring(datum.indexOf("-")+1);
		 mesec=datum.substring(0, datum.indexOf("-"));
		 datum=datum.substring(datum.indexOf("-")+1);
		 dan=datum.substring(0, datum.indexOf("T"));
		 datum=datum.substring(datum.indexOf("T")+1);
		 sat=datum.substring(0, datum.indexOf(":"));
		 datum=datum.substring(datum.indexOf(":")+1);
		 minut=datum.substring(0, datum.indexOf(":"));
		 datum=datum.substring(datum.indexOf(":")+1);
		 sekund=datum.substring(0, datum.indexOf("."));
		 
		 SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
		 
		 String dateInString = dan+"-"+mesec+"-"+godina+" "+sat+":"+minut+":"+sekund;
		 
		 Date date=null;
		 try {
			date = sdf.parse(dateInString);
			//OVDE MORAM RUCNO DA STAVIM 12 JER MI OVAKO PARSER GLEDA OVIH 12 KAO DA JE PONOC I PRETVORI ONDA U 00
			if(sat.equals("12"))
				date.setHours(12);
		 } catch (ParseException e) {
			e.printStackTrace();
		 }
		 
		 return date.toString();
	}
	 
}
